﻿//通用 移动 Div 类
//请保留一下我的信息,谢谢
//Edit By Skybot
//QQ:35287352
function Tong_MoveDiv()
{
	//参数说明
	// id 要移动的层ID 
	// Evt 是 event, window.event; 要在FF 中可以用    e ? e :window.event;
	// T 为 int 有数字是拖动 没有是变大小
	this.Move=function(Id,Evt,T)
	{
		if(Id=="") return;
		var o = document.getElementById(Id);
		if(!o) return;//如果这个东东不在
		evt = Evt ? Evt : window.event;
		o.style.position = "absolute";//设定他的样式为绝对定位
		o.style.zIndex = 200;//这里显示上下的
		var obj = evt.srcElement ? evt.srcElement : evt.target; //得到个原素  使它在FF中也可以用
		//得到当前对要移动对象的 坐标
		var w = o.offsetWidth;
	    var h = o.offsetHeight;
	    var l = o.offsetLeft;
	    var t = o.offsetTop;
	    var div = document.createElement("DIV");//新原素DIV
		document.body.appendChild(div);
	    div.style.cssText = "filter:alpha(Opacity=10,style=0);opacity:0.2;width:"+w+"px;height:"+h+"px;top:"+t+"px;left:"+l+"px;position:absolute;background:#000";//设定 filter； 注意opacity 是FF中的 Opacity
	    div.setAttribute("id", Id +"temp");
		
		if(T)//看看是拖动还是 变大小
		{
			this.Move_OnlyMove(Id,evt);
		}
		else
		{
			
		}
	}
	
	//移动函数
	//参数 Id  要移动的层ID 
	//Evt 是 event, window.event; 要在FF 中可以用    e ? e :window.event;
	this.Move_OnlyMove = function(Id,Evt)
	{
		var o = document.getElementById(Id+"temp");
		if(!o) return;
		evt = Evt?Evt:window.event;//都是FF 才要这么写的
		var relLeft = evt.clientX - o.offsetLeft;//得到左边的 宽度
	    var relTop = evt.clientY - o.offsetTop;//得到上边的 宽度
		//抓取 事件
		if (!window.captureEvents)
		{
	    	o.setCapture(); //指定  抓取 事件
	    
		}
		else
		{
			window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
	    }
		
		//文档的 onmousemove 事件
		document.onmousemove = function(e)
		{
			if (!o) return;
		    e = e ? e : window.event;
		    if (e.clientX - relLeft <= 0)
			    o.style.left = 0 +"px";
		    else if (e.clientX - relLeft >= document.documentElement.clientWidth - o.offsetWidth - 2)
			    o.style.left = (document.documentElement.clientWidth - o.offsetWidth - 2) +"px";
		    else
			    o.style.left = e.clientX - relLeft +"px";
		    if (e.clientY - relTop <= 1)
			    o.style.top = 1 +"px";
		    else if (e.clientY - relTop >= document.documentElement.clientHeight - o.offsetHeight - 30)
			    o.style.top = (document.documentElement.clientHeight - o.offsetHeight - 30) +"px";
		    else
			    o.style.top = e.clientY - relTop +"px";
		}
		
		//文档的 onmouseup 事件
		document.onmouseup = function()
	    {
		    if (!o) return;
		    if (!window.captureEvents)
		    	o.releaseCapture();
		    else
		    	window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
		    var o1 = document.getElementById(Id);
		    if (!o1) return;
		    var l0 = o.offsetLeft;
		    var t0 = o.offsetTop;
		    var l = o1.offsetLeft;
		    var t = o1.offsetTop;	
		    MyMove.Move_e(Id, l0 , t0, l, t);
		    document.body.removeChild(o);
		    o = null;
	    }	
	}
	
	this.Move_e = function(Id, l0 , t0, l, t)
    {
	    if (typeof(window["ct"+ Id]) != "undefined") clearTimeout(window["ct"+ Id]);
	    var o = document.getElementById(Id);
	    if (!o) return;
	    var sl = st = 8;
	    var s_l = Math.abs(l0 - l);
	    var s_t = Math.abs(t0 - t);
	    if (s_l - s_t > 0)
		    if (s_t)
			    sl = Math.round(s_l / s_t) > 8 ? 8 : Math.round(s_l / s_t) * 6;
		    else
			    sl = 0;
	    else
		    if (s_l)
		    	st = Math.round(s_t / s_l) > 8 ? 8 : Math.round(s_t / s_l) * 6;
		    else
			    st = 0;
	    if (l0 - l < 0) sl *= -1;
	    if (t0 - t < 0) st *= -1;
	    if (Math.abs(l + sl - l0) < 52 && sl) sl = sl > 0 ? 2 : -2;
	    if (Math.abs(t + st - t0) < 52 && st) st = st > 0 ? 2 : -2;
	    if (Math.abs(l + sl - l0) < 16 && sl) sl = sl > 0 ? 1 : -1;
	    if (Math.abs(t + st - t0) < 16 && st) st = st > 0 ? 1 : -1;
	    if (s_l == 0 && s_t == 0) return;
	    if (Math.abs(l + sl - l0) < 2)
		    o.style.left = l0 +"px";
	    else
		    o.style.left = l + sl +"px";
	    if (Math.abs(t + st - t0) < 2) 
		    o.style.top = t0 +"px";
	    else
		    o.style.top = t + st +"px";
	    window["ct"+ Id] = window.setTimeout("MyMove.Move_e('"+ Id +"', "+ l0 +" , "+ t0 +", "+ (l + sl) +", "+ (t + st) +")", 1);
    }
	
	
}
var MyMove = new  Tong_MoveDiv();
